linux 部署单体版本

服务器选购建议

按量付费推荐

开发环境、测试环境强烈建议选择阿里云 ECS 按量付费模式,成本更灵活。详见《阿里云服务器 ECS 按量付费和包年包月有什么区别?》

直接访问 阿里云 ECS 官网 购买,无需等待官方活动。

推荐配置清单

配置项推荐值
付费类型按量付费
实例规格4vCPU/16GiB/Intel 处理器
操作系统镜像CentOS 7.9 64 位
系统盘容量100GB
公网 IP分配
带宽计费模式按使用流量
带宽峰值100Mbps

环境初始化

环境依赖

单体版本需要安装 JDK 17、MySQL 8.0、Redis、Nginx 等基础组件,具体安装步骤请参考微服务版本的环境初始化文档。

确保以下组件已正确安装:

  1. JDK 17:单体版本基于 Java 17 运行
  2. MySQL 8.0:数据库服务
  3. Redis:缓存服务
  4. Nginx:Web 服务器和反向代理

配置 Nginx

1. 创建前端配置文件

vim /etc/nginx/conf.d/pigx-ui.conf

2. 写入以下配置内容

server {
    listen 80;
    server_name localhost;

    # 启用 Gzip 压缩提升传输效率
    gzip on;
    gzip_static on;
    gzip_min_length 1k;
    gzip_comp_level 4;
    gzip_proxied any;
    gzip_types text/plain text/xml text/css;
    gzip_vary on;
    gzip_disable "MSIE [1-6].(?!.*SV1)";

    # 前端静态资源目录(dist 内的文件直接放在此目录下)
    root /data/pigx-ui/;

    # API 反向代理配置
    location ^~/api/ {
        proxy_pass http://127.0.0.1:9999/; # 指向单体应用端口,注意斜杠
        proxy_connect_timeout 60s;
        proxy_read_timeout 120s;
        proxy_send_timeout 120s;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto http;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header from "";

        # 屏蔽敏感路径(双重保护)
        location ~ ^/api/(actuator|swagger-ui|v3/api-docs|swagger-resources|webjars|doc.html|druid) {
            return 403;
        }
    }
}

3. 重启 Nginx 服务

nginx -t # 检查配置语法
nginx -s reload # 重载配置

前端构建部署

1. 本地构建前端资源

进入 pigx-ui-pro 目录执行构建命令:

pnpm install # 首次需要安装依赖
pnpm build # 构建生产版本

构建完成后会在项目根目录生成 dist 文件夹。

2. 上传静态资源

dist 文件夹内的所有文件(不包括 dist 文件夹本身)上传到服务器的 /data/pigx-ui/ 目录。

目录结构

确保静态资源直接位于 /data/pigx-ui/ 下,而不是 /data/pigx-ui/dist/,否则 Nginx 无法正确访问。

后端构建部署

1. 打包单体应用

构建环境

在项目根目录(pigx)执行打包命令,使用 boot 配置文件激活单体模式。

cd pigx
mvn clean install -Pboot

打包完成后,在 pigx-boot/target/ 目录下生成 pigx-boot.jar 文件。

2. 上传 JAR 包

pigx-boot.jar 上传到服务器的应用目录(如 /data/pigx/)。

3. 启动应用

cd /data/pigx/
nohup java -Xmx4g -Xms4g -XX:+UseG1GC -Dfile.encoding=UTF-8 -jar pigx-boot.jar > /dev/null 2>&1 &
JVM 参数说明

-Xmx4g:最大堆内存 4GB -Xms4g:初始堆内存 4GB -XX:+UseG1GC:使用 G1 垃圾回收器 -Dfile.encoding=UTF-8:指定字符编码

4. 验证启动状态

# 查看进程
ps -ef | grep pigx-boot

# 查看日志
tail -f nohup.out

生产安全加固

1. 关闭敏感端点

生产必做

生产环境务必关闭 Swagger 文档和 Actuator 监控端点,避免敏感信息泄露。

编辑 pigx-boot/src/main/resources/application.yml 配置文件:

# 关闭敏感端点
management:
  endpoints:
    enabled-by-default: false

# 关闭 Swagger 文档
springdoc:
  api-docs:
    enabled: false

2. 配置安全组规则

端口安全

服务器仅对外开放 80/443 端口,所有后端服务端口(如 9999)不得暴露到公网。

推荐端口策略

端口号功能开放范围生产建议
80HTTP 访问公网开放
443HTTPS 访问公网开放(建议配置 SSL)
9999应用服务内网禁止公网访问
3306MySQL 数据库本地仅 127.0.0.1 访问
6379Redis 缓存本地仅 127.0.0.1 访问

Nginx 配置验证

双重保护

本文提供的 Nginx 配置已包含敏感路径屏蔽规则,即使应用端点未关闭,Nginx 也会拦截访问请求。

确保复制本文档中的 Nginx 配置,其中包含以下安全规则:

# 屏蔽所有敏感路径
location ~ ^/api/(actuator|swagger-ui|v3/api-docs|swagger-resources|webjars|doc.html) {
    return 403;
}

3. 数据库安全

# 禁止 root 远程登录
mysql -u root -p
mysql> DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
mysql> FLUSH PRIVILEGES;

# 创建专用应用账户
mysql> CREATE USER 'pigx'@'localhost' IDENTIFIED BY 'strong_password';
mysql> GRANT ALL PRIVILEGES ON pigx.* TO 'pigx'@'localhost';
mysql> FLUSH PRIVILEGES;

4. 防火墙配置

# 仅开放必要端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
安全警告

网络安全无小事!本部署流程基于 PIGX 服务 2000+ 企业客户的生产实践总结,请严格遵循安全规范,切勿图方便开放不必要的端口。

常见问题

1. 访问页面显示 502 错误

检查后端应用是否正常启动:

curl http://127.0.0.1:9999/actuator/health # 如果已关闭端点则无法访问
ps -ef | grep pigx-boot # 检查进程是否存在

2. 静态资源 404

确认 Nginx root 目录下直接包含 index.html,而不是 dist/index.html

3. 内存不足

单体应用建议最低配置 4GB 内存,可根据实际业务量调整 JVM 参数:

# 2GB 内存配置
java -Xmx2g -Xms2g -XX:+UseG1GC -jar pigx-boot.jar

# 8GB 内存配置
java -Xmx8g -Xms8g -XX:+UseG1GC -jar pigx-boot.jar